package com.xlzcx.xltz.controller;

import com.xlzcx.xltz.entity.vo.DRegionVo;
import com.xlzcx.xltz.filter.SkipLogin;
import com.xlzcx.xltz.service.d_region.DRegionService;
import com.xlzcx.xltz.utils.R;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.List;
import java.util.regex.Pattern;

/**
 * 作者: 李咨辰
 * 文件名: DRegionController.java
 * 路径: com.xlzcx.xltz.controller
 * 时间: 2024-11-20 13:26
 * 版本: 1.0
 * 描述: TODO 行政区划
 **/
@RestController
@RequestMapping("/region")
public class DRegionController {

    /**
     * 调用业务层
     */
    @Resource
    private DRegionService dRegionService;

    /**
     * 根据编号查询
     *
     * @param id        行政区划编号
     * @param hierarchy 查询层级
     * @return 行政区划
     */
    @SkipLogin
    @GetMapping("/getRegionById")
    public R getRegionById(@RequestParam(required = false) String id, @RequestParam(required = false) Integer hierarchy) {
        if (!"".equals(id) && id != null) {
            if (Pattern.compile("^\\d+$").matcher(id).matches() && !"0".equals(id) && id.length() < 10) {
                StringBuilder idBuilder = new StringBuilder(id);
                for (int i = id.length(); i < 9; i++) {
                    idBuilder.append("0");
                }
                id = idBuilder.toString();

                if (hierarchy == null) {
                    hierarchy = 0;
                }
                DRegionVo region = dRegionService.getRegionById(id, hierarchy);
                return R.ok(region);
            }
        }
        return R.error("参数错误");
    }

    /**
     * 根据父级行政区划编号查询行政区划
     *
     * @param parentId 父级行政区划编号
     * @return 行政区划列表
     */
    @SkipLogin
    @GetMapping("/getRegionByParentId")
    public R getRegionByParentId(@RequestParam(required = false) String parentId) {
        if (parentId != null && !"".equals(parentId) && Pattern.compile("^\\d+$").matcher(parentId).matches()) {
            StringBuilder parentIdBuilder = new StringBuilder(parentId);
            for (int i = parentId.length(); i < 9; i++) {
                parentIdBuilder.append("0");
            }
            parentId = parentIdBuilder.toString();
            List<DRegionVo> dRegionVoList = dRegionService.getRegionByParentId(Integer.valueOf(parentId));
            return R.ok(dRegionVoList);
        }
        return R.error("参数错误");
    }

    /**
     * 根据父级行政区划编号查询行政区划
     *
     * @param parentId 父级行政区划编号
     * @return 行政区划列表
     */
    @SkipLogin
    @GetMapping("/getTotalByParentId")
    public R getTotalByParentId(@RequestParam(required = false) String parentId) {
        if (parentId != null && !"".equals(parentId) && Pattern.compile("^\\d+$").matcher(parentId).matches()) {
            StringBuilder parentIdBuilder = new StringBuilder(parentId);
            for (int i = parentId.length(); i < 9; i++) {
                parentIdBuilder.append("0");
            }
            parentId = parentIdBuilder.toString();
            int total = dRegionService.getTotalByParentId(Integer.valueOf(parentId));
            return R.ok(total);
        }
        return R.error("参数错误");
    }

    /**
     * 查询行政区划及所有祖级区划
     *
     * @param id 行政编号
     * @return 行政区划
     */
    @SkipLogin
    @GetMapping("/getRegionAncestorsById")
    public R getRegionAncestorsById(@RequestParam(required = false) String id) {
        if (id != null && !"".equals(id) && Pattern.compile("^\\d+$").matcher(id).matches()) {
            StringBuilder idBuilder = new StringBuilder(id);
            for (int i = id.length(); i < 9; i++) {
                idBuilder.append("0");
            }
            id = idBuilder.toString();

            DRegionVo region = dRegionService.getRegionAncestorsById(id);
            return R.ok(region);
        }
        return R.error("参数错误");
    }
}
